package cn.iocoder.yudao.module.system.service.a_audio_and_video;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.a_audio_and_video.vo.*;
import cn.iocoder.yudao.module.system.dal.dataobject.a_audio_and_video.AudioAndVideoDO;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;


public interface AudioAndVideoService {


    /**
     * 获得音视频分页
     *
     * @param pageReqVO 分页查询
     * @return 音视频分页
     */

    PageResult<AudioAndVideoQukanPageReqVO> getPageByQukan(AudioAndVideoPageReqVO pageReqVO, Long userId);

    /**
     * 根据id删除
     *
     * @param ids 删除对象
     */
    Boolean delete(Long[] ids);


    /**
     * 获得音视频
     *
     * @param id 编号
     * @return
     */
    AudioAndVideoDO get(String id);


    /**
     * 获得音视频
     *
     * @param id 编号
     * @return
     */
    AudioAndVideoReqVO getByQukan(String id);

    /**
     * 更新音视频
     *
     * @param audioAndVideoDO 更新信息
     */
    Boolean update(AudioAndVideoDO audioAndVideoDO);

    /**
     * 查询本月新增音视频数
     */
    long insertAudioAndVideoByDay();

    /**
     * 修改送审状态
     *
     * @param id
     * @param reviewStatus
     * @return
     */
    Boolean updateReview(String id, Integer reviewStatus);

    /**
     * 更新推送资源库状态
     */
    Boolean updateShare(String id, String shareStatus);

    /**
     * 更新推送资源库状态
     */
    Boolean updatePush(String id, String pushStatus);


    Boolean updateQukanUrl(AudioAndVideoDO audioAndVideoDO);

    Boolean uploadChunk(int chunkNumber, int chunkTotal, MultipartFile file, String fileMD5, String fileName);

    /**
     * 保存文件，并返回文件的访问路径
     * @return 文件路径
     */
    String createFile(FileUploadNewReqVO uploadReqVO);

    String save(AudioAndVideoBaseVO baseVO) throws IOException;

    PageResult<AudioAndVideoDO> selectPage(AudioAndVideoPageReqVO pageReqVO);

    Boolean audioCutter(Long id, String startTime, String duration);

    Boolean videoCutter(String input, String startTime, String duration);

    Boolean updateDuration(Long id);

    /**
     * 获取音视频下载地址
     * @param id
     * @return
     */
    Object getAudioAndVideoDownloadUrl(String id);

    /**
     * 更新下载次数
     * @param id
     */
    void updateDownloadCount(String id);
}
